++++++++++++++++++++
++++++++++++++++++++
++ =-=-=-=-=-=-=- ++
++ = KMICIC^lFE = ++    
++ =-=-=-=-=-=-=- ++
++++++++++++++++++++
++++++++++++++++++++
				


                                PRESENT :



          **************************************************** 
          ****************************************************
          **                                                **
          **   Tutorial do Crackme v1.0 by deztroyer^       **
          **                                                **
          ****************************************************
          ****************************************************


Crackme jest naprawde latwiutkie i mysle, ze wiekszosc newbe powinna sobie mimo wszystko z nim poradzic. Jakby jednak komus cos nie wychodzilo to niech sobie najpierw poczyta ;)


Oki. Jedziemy!


Uruchamiamy crackmesa i wpisujemy jakies haselko. Ja wpisalem : TuruRuru :) Zakaldamy pulapke na GetDlgItemTextA i naciskamy "Check it!" i widzimy taki oto kodzik :

 1.   E867000000          CALL      USER32!GetDlgItemTextA
 2.   83F800              CMP       EAX,00
 3.   74B6                JZ        00401094
 4.   B88D304000          MOV       EAX,0040308D
 5.   8B38                MOV       EDI,[EAX]
 6.   81F7ADDEADDE        XOR       EDI,DEADDEAD
 7.   C1E703              SHL       EDI,03
 8.   C1CF05              ROR       EDI,05
 9.   81F73B2B7387        XOR       EDI,87732B3B
 10.  83FF00              CMP       EDI,00
 11.  0F857AFFFFFF        JNZ       0040107A
 12.  83C003              ADD       EAX,03
 13.  8A18                MOV       BL,[EAX]
 14.  80FB63              CMP       BL,63
 15.  0F856CFFFFFF        JNZ       0040107A
 16.  83C001              ADD       EAX,01
 17.  8B38                MOV       EDI,[EAX]
 18.  81F778563412        XOR       EDI,12345678
 19.  C1CF03              ROR       EDI,03
 10.  81F73412C3CA        XOR       EDI,CAC31234
 21.  81EFD611ABAC        SUB       EDI,ACAB11D6
 22.  83FF00              CMP       EDI,00
 23.  0F847AFFFFFF        JZ        004010AB
 25.  E944FFFFFF          JMP       0040107A

I co sie tu wyrabia? Ano sprawdzane jest czy wpisalismy poprawne haselko :) Zacznijmy po kolei.

 1.   CALL      USER32!GetDlgItemTextA
 2.   CMP       EAX,00
 3.   JZ        00401094

1. Pobranie textu
2. sprawdzenia czy cos wpisalismy
3. jesli nie to wypad

Funkcja GetDlgItemTextA zwraca swoja wartosc w eax. To tam przechowywana jest liczba znakow jaka wpisalismy. Jezeli w eax jest 0 to znaczy, ze nic nie wpisalismy. Chyba jasne co? ;) 

Oki dalej :

 4.   MOV       EAX,0040308D
 5.   MOV       EDI,[EAX]

4. Do eax idzie to co wpisalismy jako haslo czyli nasze TuruRuru.
5. Do edi ida pierwsze 4 znaki naszego hasla czyli Turu. Jednak beda zapisane w notacji intela i zamiast "Turu" bedzie "uruT" Sprawdz sam. Wpisz w konsoli :

? edi

Kapisz? :)

Dalej :

 6.   XOR       EDI,DEADDEAD
 7.   SHL       EDI,03
 8.   ROR       EDI,05
 9.   XOR       EDI,87732B3B
 10.  CMP       EDI,00
 11.  JNZ       0040107A

6. To co mamy w edi jest xorowane z wartoscia "deaddead"
7. Nastepuje przesuniecie kazdego bitu o lewo.
8. Teraz nastepuje obrot naszej wartosci w prawo
9. Znowu male xorowanko
10. Porownanie czy po calym mieleniu w edi jest 0
11. Jezeli nie zero to wypad

Hmmm... To co mamy zrobic aby otrzymac pierwsze 4 litery hasla? Spojrzmy na powyzsze instrukcje. Czy mozna je w jakis sposob odwrocic? Tak! Zarowno xor, shl jak i ror sa operacjami calkowicie odwracalnymi. Spojrzmy teraz na koncowy wynik. Po tych operacjach mam wyjsc 0. Czyli wystarczy ustawic edi na 0, odwrocic operacje i przepuscic przez odwrocona procke. Jak odwracaja sie powyzsze instrukcje?

XOR - mala matematyka (wlasciwosci instrukcji xor) :

a xor b = c
b xor a = c
c xor b = a
b xor c = a
c xor a = b
a xor c = b


SHL - przeciwna operacja - SHR

ROR - przeciwna operacja - ROL 

Zreszta spojrz do dowolnej ksiazki o asmie. Tam sa opisane dokladnie wszystkie instrukcje asemblera.

Oki. Znamy odwrotnosci powyzszych instrukcji. Teraz trza to jakos sklecic w odpowiednia mala procke :

   MOV       EDI, 0
   XOR       EDI, 87732B3B
   ROL       EDI, 05
   SHR       EDI, 03
   XOR       EDI, DEADDEAD

Ustawiamy tu edi na zero i odwracamy instrukacje jednoczesnie dodajac ich odwrotne operandy.

Do tuta zalaczam odpowiednie source, w ktorym wszystko jest ladnie jak na tacy :) Wklepujemy tylko "i3here on" w softice, odpalamy proga i podgladamy wyniki :)

Czyli w konsoli wklepujemy :

? edi 

i widzimy, ze pierwsze 4 litery to : "arC" 
Nalezy to odwrocic i mamy : "Cra"

Ten znaczek na koncu moze nas dziwic, ale instrukcje takie jak SHR daja wiele wynikow. Zreszta zaraz wszystko wyjdzie w praniu :)

Dalej :

 12.   ADD       EAX,03
 13.   MOV       BL,[EAX]
 14.   CMP       BL,63
 15.   JNZ       0040107A


12. Eax "przesuwa" sie o 3 pozycje. Teraz pierwszym znaczkiem w pamieci jest nasze "u"
13. Wlasnie nasze "u" wedruje do bl
14. Porownanie czy bl = 63 (literka "c")
15. Jezeli nie "c" to wypad :)

Tu chyba nie trzeba nic tlumaczyc :) Po prostu 4 litera hasla ma byc literka "c". Czyli olewamy nasz krzaczek z haselka wyzej i zamiast "Cra" mamy "Crac" :)

Jedziemy dalej :

 16.   ADD       EAX,01
 17.   MOV       EDI,[EAX]
 18.   XOR       EDI,12345678
 19.   ROR       EDI,03
 20.   XOR       EDI,CAC31234
 21.   SUB       EDI,ACAB11D6
 22.   CMP       EDI,00
 23.   JZ        004010AB
 24.   JMP       0040107A

16. Eax "przesuwane" i jedna pozycje. Teraz mamy przed soba 4 ostatnie literki naszego hasla :)
17. Te literki wedruja do edi
18 - 21 - znowu male mielonko
22. Sprawdzenie czy po mieleniu jest 0
23. Jezeli tak to skacz do grejtow za zlamanie crackme :)
24. Skok do zlego messageboxa

I znowu mamy podobna sytuacje jak wczesniej. Teraz tylko pojawila sie insturucja sub. Odwrotna do niej to add, ale to nawet najwieksze lamusy wiedza a ty przeciez nim nie jestes :)

No to przedstawiam wam odwrocona procke :

   MOV       EDI, 0
   ADD       EDI, ACAB11D6
   XOR       EDI, CAC31234
   ROL       EDI, 03
   XOR       EDI, 12345678

I po ? edi widzimy, ze ostatnie 4 literki to "!tIk". Odwracamy i jest "kIt!"

Laczymy calosc i mamy : "CrackIt!"
Proste prawda? :)

No, to by bylo na tyle :)


I jeszcze tylko na koniec duze YO! dla :

All:

* lFE
* HTBTeam
* xtreeme
* UnderPl
* TKM!
* MBE
* AAOCG
* wszystkich innych, ktorych niechcacy pominalem :)

 
Pozdro
Kmicic (kmicic85@o2.pl)
